﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLLEP.Funcionalidad
{
    public class BLLCodigoActivacion:BLLGenerico
    {
        public BLLCodigoActivacion(EstacionDePoderDataContext contexto) : base(contexto) { }
        public BLLCodigoActivacion() : this(new EstacionDePoderDataContext()) { }

        public string GenerarCodigo(string emailUsuario)
        {
            string codigo = string.Empty;
            Random ran = new Random();

            do
            {
                codigo = string.Empty;
                do
                {
                    codigo += ran.Next(0, 9);
                } while (codigo.Length < 10);    
            } while (Existe(codigo));

            EP_CodigoActivacion codigoViejo = TraerPorEMail(emailUsuario);
            if (codigoViejo != null)
                Contexto.EP_CodigoActivacions.DeleteOnSubmit(codigoViejo);

            EP_CodigoActivacion codigoNuevo = new EP_CodigoActivacion();
            codigoNuevo.Codigo = codigo;
            codigoNuevo.Fecha = DateTime.Now;
            codigoNuevo.EP_Usuario = new BLLUsuario(Contexto).Traer(emailUsuario);
            Contexto.EP_CodigoActivacions.InsertOnSubmit(codigoNuevo);

            return codigo;
        }

        public bool Existe(string codigo)
        {
            return Contexto.EP_CodigoActivacions.Where(c => c.Codigo.Equals(codigo)).Count() > 0;
        }

        public EP_CodigoActivacion TraerPorEMail(string email)
        {
            return Contexto.EP_CodigoActivacions.Where(c => c.EP_Usuario.Email.ToLower().Equals(email.ToLower())).FirstOrDefault();
        }

        public EP_CodigoActivacion TraerPorCodigo(string codigo)
        {
            return Contexto.EP_CodigoActivacions.Where(c => c.Codigo.Equals(codigo)).FirstOrDefault();
        }

        public void Activar(string codigo)
        {
            EP_CodigoActivacion codigoDatos = Contexto.EP_CodigoActivacions.Where(c => c.Codigo.Equals(codigo)).FirstOrDefault();

            if(codigoDatos == null)
                return;

            if (codigoDatos.EP_Usuario.EP_CodigoActivacions.Count() > 1)
                return;

            codigoDatos.EP_Usuario.Habilitado = true;
        }
    }
}
